const path = require("path");
const inquirer = require("inquirer");
const keb = require("kebab-case");
const pathExists = require("path-exists").sync;
const groupName = "@light-send";

/**
 * 验证输入的项目名称
 * @param v
 * @returns {boolean}
 */
function isValidateName(v) {
  return /^[a-zA-Z]+([-][a-zA-Z][a-zA-Z0-9]*|[_][a-zA-Z][a-zA-Z0-9]*|[a-zA-Z0-9])*$/.test(v);
}

async function command() {
  const result = {};
  /**
   * 询问用户项目名称
   */
  const { name } = await inquirer.prompt([
    {
      type: "input",
      name: "name",
      message: `请输入项目名称`,
      validate(v) {
        /**
         * 项目名称的规则
         * 1.首字符必须为英文字符
         * 2.尾字符必须为英文或数字，不能为字符
         * 3.字符仅允许"-_"
         */
        const done = this.async();
        setTimeout(() => {
          if (!isValidateName(v)) {
            done(`请输入正确的项目名称：首字符必须为英文字符、尾字符必须为英文或数字，不能为字符、字符仅允许"-_"`);
            return;
          } else {
            done(null, true);
          }
        }, 0);

      }
    }
  ]);
  /**
   * 项目存放的路径，默认为packages下面
   */
  const { local } = await inquirer.prompt([
    {
      type: "input",
      name: "local",
      message: `请输入存放的路径`,
      /**
       * process.cwd() 项目路径
       * package目录
       * 项目名
       */
      default: path.join(process.cwd(), "packages", name)
    }
  ]);
  /**
   * 判断当前路径是否存在
   * 如果路径存在则询问是否覆盖
   * 如果不存在直接返回用户输入的信息方便ejs渲染
   */
  if (pathExists(local)) {
    const { ifContinue } = await inquirer.prompt({
      type: "confirm",
      name: "ifContinue",
      default: false,
      message: "当前文件夹不为空,是否继续创建项目"
    });
    if (!ifContinue) {
      throw new Error("已取消创建");
    }
  }
  result.inputName = name;
  result.name = keb(name).replace(/^-/, "");
  result.local = local;
  result.projectName = `${groupName}/${keb(name)}`;
  result.umdName = keb.reverse(`lint-send-${result.inputName}`);
  return result;
}

module.exports = command;
